/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package docmanager.operation.usuarios;


import bf.*;
import bf.operation.Operation;
import bf.operation.OperationException;
import bf.utils.Util;
import docmanager.business.objects.Usuario;
import docmanager.db.ConnectionPool;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author Juan Lucas
 */
public class OpModificarUsuario2 extends Operation
{
   String returnURL = "DMController?op=ListarUsuarios";
    
    public Map execute(HttpServletRequest request) throws OperationException
    {
        int id = Integer.parseInt(request.getParameter("id"));
        String newLogin = request.getParameter("login");
        String clave = request.getParameter("clave");
        String oldLogin = request.getParameter("oldLogin");
        String[] rol = request.getParameterValues("rol");
        int[] roles = null;
        if (rol != null)
        	roles = Util.toIntArray(rol);
        else
        {
            this.returnURL = "DMController?op=ModificarUsuario1";
            Map m = new HashMap();
            m.put("mensaje", "<h2>El usuario debe tener algun rol.</h2>");
            return m;                        	
        }
        
        Connection conn = null;
        try
        {
            conn = ConnectionPool.getConnection();
        } catch (SQLException sQLException)
        {
            sQLException.printStackTrace();
            throw new OperationException();
        }
        // Si el login ya existe, cancelar todo.
        try
        {
            conn.setAutoCommit(false);
            System.out.println("OpAgregarUsuario2: chequeando existencia usuario");
            
            
            if (!newLogin.equals(oldLogin) && Usuario.existeUsuario(conn, newLogin))
            {
                conn.setAutoCommit(true);
                this.returnURL = "DMController?op=ModificarUsuario1";
                Map m = new HashMap();
                m.put("mensaje", "<h2>Usuario ya existente</h2>");
                ConnectionPool.closeConn(conn);
                return m;                
            }
            // Modificamos el usuario.
            // Ojo que debe estar todo hecho en el contexto de una TRANSACCION.
            // Modificar el DataAccess para tener esto en cuenta.
            Usuario u = new Usuario(id, newLogin, clave);
            u.modificar(conn);
            // Eliminamos los viejos roles.
            String query = "DELETE FROM usuarios_roles WHERE id_usuario =" + id;
            DataAccess.dmlQueryStatic(conn, query);
            // Insertamos los nuevos roles.
            int id_usuario = u.getId();
            for (int i = 0; i < roles.length; i++)
            {
                query = "INSERT INTO usuarios_roles(id_usuario,id_rol) "
                        + "values(" + id_usuario + "," + roles[i] + ")";
                DataAccess.dmlQueryStatic(conn, query);
            }
            conn.commit();
            conn.setAutoCommit(true);
            ConnectionPool.closeConn(conn);
        } catch (SQLException sQLException)
        {
            sQLException.printStackTrace();
            throw new OperationException();            
        }
        Map m = new HashMap();
        m.put("mensaje", "<h2>Usuario modificado con exito</h2>");
        return m;
        
    }

    
    public String getReturnURL()
    {
       return returnURL; 
    }
     
}
